package 斗地主游戏1控制台版;

//import cn.hutool.core.io.FileUtil;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;

public class LoginJFrame extends JFrame implements MouseListener {
    ArrayList<user> list = new ArrayList<>();

    public LoginJFrame() throws HeadlessException {
        //读取本地文件中的用户信息
        readUserInfo();
        initJFrame();
        initView();
        //显示界面,建议写最后
        this.setVisible(true);
    }

    private void readUserInfo() {
        //1.读取数据
        List<String> userInfoList =null;
        System.out.println(userInfoList);
        for (String s : userInfoList) {
            String userName = s.split("&")[0].split("=")[1];
            String userPassword = s.split("&")[1].split("=")[1];
            user u=new user(userName,userPassword);
            list.add(u);
        }
    }


    //5.添加登录按钮
    JButton login = new JButton();
    //6.添加注册按钮
    JButton register = new JButton();
    //1.1 添加用户名输入框
    JTextField username = new JTextField();
    //2.1 添加密码输入框
    JPasswordField password = new JPasswordField();

    //3.1 添加验证码输入框
    JTextField code = new JTextField();
    //4.添加正确密码
    JLabel rightcode = new JLabel();
    //正确的验证码
    String codeStr = CodeUtil.getCode();

    public void initJFrame() {
        this.setSize(633, 423);//设置宽高
        this.setTitle("欢乐斗地主 登录");//设置标题
        this.setDefaultCloseOperation(3);//设置关闭模式
        this.setLocationRelativeTo(null);//居中
        this.setAlwaysOnTop(true);//置顶
        this.setLayout(null);//取消内部默认布局
    }

    public void initView() {
        //1. 添加用户名文字
        Font usernameFont = new Font(null, 1, 16);
        JLabel usernameText = new JLabel("用户名");
        usernameText.setForeground(Color.white);
        usernameText.setFont(usernameFont);
        usernameText.setBounds(140, 55, 55, 22);
        this.getContentPane().add(usernameText);

        //1.1 添加用户名输入框
        username.setBounds(223, 46, 200, 30);
        this.getContentPane().add(username);


        //2. 添加用户密码文字
        Font passwordFont = new Font(null, 1, 16);
        JLabel passwordTest = new JLabel("密码");
        passwordTest.setForeground(Color.white);
        passwordTest.setFont(passwordFont);
        passwordTest.setBounds(197, 95, 40, 22);
        this.getContentPane().add(passwordTest);

        //2.1 添加密码输入框
        password.setBounds(263, 87, 160, 30);
        this.getContentPane().add(password);

        //3 添加验证码提示
        Font codeFont = new Font(null, 1, 16);
        JLabel codeTest = new JLabel("验证码");
        codeTest.setForeground(Color.white);
        codeTest.setFont(codeFont);
        codeTest.setBounds(215, 142, 55, 22);
        this.getContentPane().add(codeTest);


        //3.1 添加验证码输入框
        code.setBounds(291, 133, 100, 30);
        this.getContentPane().add(code);

        //3.2获取正确验证码

        Font rightCodeFont = new Font(null, 1, 15);
        //设置颜色
        rightcode.setForeground(Color.red);
        //设置字体
        rightcode.setFont(rightCodeFont);
        //添加内容
        rightcode.setText(codeStr);
        //绑定鼠标事件
        rightcode.addMouseListener(this);
        //设置位置和高
        rightcode.setBounds(400, 133, 100, 30);
        this.getContentPane().add(rightcode);

        //4.添加登录界面
        login.setBounds(123, 310, 128, 47);
        login.setIcon(new ImageIcon("E:\\java代码\\xiangmu\\src\\day24\\image\\login\\登录按钮.png"));
        //去除按钮边框
        login.setBorderPainted(false);
        //去除按钮背景
        login.setContentAreaFilled(false);
        //给登录按钮绑定鼠标事件
        login.addMouseListener(this);
        this.getContentPane().add(login);


        //5.添加注册按钮
        register.setBounds(256, 310, 128, 47);
        register.setIcon(new ImageIcon("E:\\java代码\\xiangmu\\src\\day24\\image\\login\\注册按钮.png"));
        //去除按钮的边框
        register.setBorderPainted(false);
        //去除按钮的背景
        register.setContentAreaFilled(false);
        //给注册按钮绑定鼠标事件
        register.addMouseListener(this);
        this.getContentPane().add(register);


        //6.添加背景图片
        JLabel background = new JLabel(new ImageIcon("E:\\java代码\\xiangmu\\src\\day24\\image\\login\\background.png"));
        background.setBounds(0, 0, 633, 423);
        this.getContentPane().add(background);


    }


    @Override
    public void mouseClicked(MouseEvent e) {
        Object source = e.getSource();
        if (source == login) {
            //获取两个文本框中输入的内容
            String usernameInput = username.getText();
            String passwordInput = password.getText();
            //获取用户输入的验证码
            String codeInput = code.getText();
            if (codeInput.isEmpty()) {
                showJDialog("验证码不能为空");
            } else if (usernameInput.isEmpty() || passwordInput.isEmpty()) {
                showJDialog("用户名或密码不能为空");
            } else {
                if (codeInput.equalsIgnoreCase(codeStr)) {
                    //判断集合中是否包含当前用户对象
                    //其实就是验证用户名和密码是否相同
                    //contains底层是依赖equals方法判断的，所以需要重写equals方法
                    user userInput=new user(usernameInput,passwordInput);
                    if (list.contains(userInput)){
                        //关闭当前登录界面
                        this.setVisible(false);
                        //打开游戏的主界面
                        new GameJFrame();
                    }
                   else{
                       showJDialog("用户名或密码错误");
                    }
                }
                else {
                    showJDialog("验证码不正确");
                }

            }

        } else if (source == register) {
            System.out.println("点击了注册按钮");
            //new RegisterJFrame(list);

        }
        else if (source==rightcode){
            System.out.println("更换验证码");
            //获取一个新的验证码
            String newCode= CodeUtil.getCode();
            rightcode.setText(newCode);
        }
    }

    public boolean 判断用户名存在(String username) {
        for (user user : list) {
            if (user.getName().equals(username)) {
                return true;
            }
        }
        return false;
    }

    public boolean 判断密码是否正确(String password) {
        for (user user : list) {
            if (user.getPassword().equals(password)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void mousePressed(MouseEvent e) {
        if (e.getSource() == login) {
            login.setIcon(new ImageIcon("E:\\java代码\\xiangmu\\src\\day24\\image\\login\\登录按下.png"));
        } else if (e.getSource() == register) {
            register.setIcon(new ImageIcon("E:\\java代码\\xiangmu\\src\\day24\\image\\login\\注册按下.png"));
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        if (e.getSource() == login) {
            login.setIcon(new ImageIcon("E:\\java代码\\xiangmu\\src\\day24\\image\\login\\登录按钮.png"));
        } else if (e.getSource() == register) {
            register.setIcon(new ImageIcon("E:\\java代码\\xiangmu\\src\\day24\\image\\login\\注册按钮.png"));
        }
    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }

    public void showJDialog(String content) {
        //创建一个弹框对象
        JDialog jDialog = new JDialog();
        //给弹框设置大小
        jDialog.setSize(200, 150);
        //让弹框置顶
        jDialog.setAlwaysOnTop(true);
        //让弹框居中
        jDialog.setLocationRelativeTo(null);
        //弹框不关闭永远无法操作下面的界面
        jDialog.setModal(true);

        //创建Jlabel对象管理文字并添加到弹框当中
        JLabel warning = new JLabel(content);
        warning.setBounds(0, 0, 200, 150);
        jDialog.getContentPane().add(warning);
        //让弹框展示出来
        jDialog.setVisible(true);
    }
}
